///// Кнопка на D2
class button 
{
  private:
    int _BUTTON;                  // Переменная для хранения номера пина на плате
    uint32_t _buttonTimer = 0;    // Переменная для хранения милис для кнопки
    int _buttonTimerMax = 100;    // Время задержки при нажатии кнопки 1000 = 1сек
    int _flag = 0;                // Переменная для длительного нажатия кнопки
    int _longPress;               // Длитильность нажатия кнопки
    bool _press = false;          // Флаг для отключения ложных срабатываний

  public:
    button(int pin, int longPress) // Ввести ПИН на котором сидит кнопка и длительность при которой срабатывает долгое нажатие
    {
      _BUTTON = pin;            // Получаем ПИН на котором сидит кнопка
      _longPress = longPress;   // Вводим длительность для отработки долгого нажатия
      pinMode(_BUTTON, INPUT);  // Режим пина выбран как вход
    }
    int Click() 
    {
      // Отработка короткого нажатия кнопки для сброса ошибки
      if ((digitalRead(_BUTTON) == HIGH) && !_press && ((millis() - _buttonTimer) > _buttonTimerMax)) 
      {
        _press = true;
        _buttonTimer = millis();
        //Serial.println("Короткое нажатие");
        return 1;
      }
      // Отработка длительного нажатия кнопки для сброса ошибки
      if ((digitalRead(_BUTTON) == HIGH) && _press && ((millis() - _buttonTimer) > (_buttonTimerMax*10))) 
      {
        _buttonTimer = millis();
        _flag += 1;
        if (_flag == _longPress) 
        {
          //Serial.println("Длительное нажатие, время нажатия = " + String(flag));
          return 2;
        }
      }      
      // Отработка отпускания кнопки
      if ((!digitalRead(_BUTTON) == HIGH) && _press && ((millis() - _buttonTimer) > _buttonTimerMax)) 
      {
        _press = false;
        _buttonTimer = millis();
        _flag = 0;
        //Serial.println("Я Отпущениа!!!!! время нажатия = " + String(flag));
      }
      return 0;
    }
};
